package com.dayu.springbootai.controller;

import com.dayu.springbootai.entity.vo.MessageVO;
import com.dayu.springbootai.repository.ChatHistoryRepository;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.messages.Message;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 聊天历史控制器
 * 用于查询和管理聊天历史记录
 * 
 * @author dayu
 * @date 2025/4/8 23:47
 */
@RequestMapping("/ai/history")
@RestController
public class ChatHistoryController {
    /**
     * 注入聊天历史仓库，用于获取会话ID列表
     */
    @Resource
    private ChatHistoryRepository chatHistoryRepository;

    /**
     * 注入聊天内存，用于获取具体的聊天记录
     */
    @Resource
    private ChatMemory chatMemory;

    /**
     * 获取聊天会话ID列表
     * 返回所有保存的聊天会话标识符
     * 
     * @return List<String> 会话ID列表
     */
    @GetMapping("/chat")
    public List<String> getChatList(){
        return chatHistoryRepository.getChatIds("chat");
    }
    
    /**
     * 获取指定会话的聊天历史
     * 根据会话ID获取最近的聊天记录（最多10条）
     * 
     * @param chatId 会话ID
     * @return List<MessageVO> 聊天历史记录列表
     */
    @GetMapping("/chat/{chatId}")
    public List<MessageVO> getChatHistory(@PathVariable("chatId") String chatId){
        // 从聊天内存中获取指定会话的最近10条消息
        List<Message> messages = chatMemory.get(chatId, 10);
        
        // 如果没有找到消息，则返回空列表
        if (messages == null){
            return List.of();
        }
        
        // 将Message对象转换为MessageVO对象并返回
        return messages.stream().map(x -> {
            MessageVO vo = new MessageVO(x);
            return vo;
        }).collect(Collectors.toList());
    }
}